package com.ruoyi.common.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.enums.OperatorType;

/**
 * 自定义操作日志记录注解
 * 用于标记需要记录操作日志的方法，可以指定模块名称、业务类型、操作人员类别等信息
 * 并控制是否保存请求和响应数据以及需要排除的参数
 *
 * @author ruoyi
 *
 */
@Target({ElementType.PARAMETER, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Log {
    /**
     * 模块标题，用于标识当前操作所属的业务模块
     *
     * @return 模块名称，默认为空字符串
     */
    public String title() default "";

    /**
     * 业务操作类型，定义了具体的操作功能分类
     *
     * @return 业务类型枚举，默认为OTHER（其他）
     */
    public BusinessType businessType() default BusinessType.OTHER;

    /**
     * 操作人员类型，区分是管理端还是用户端的操作
     *
     * @return 操作人员类型枚举，默认为MANAGE（管理端）
     */
    public OperatorType operatorType() default OperatorType.MANAGE;

    /**
     * 是否保存请求参数数据，用于控制日志中是否记录请求参数
     *
     * @return true表示保存请求数据，false表示不保存，默认为true
     */
    public boolean isSaveRequestData() default true;

    /**
     * 是否保存响应参数数据，用于控制日志中是否记录响应结果
     *
     * @return true表示保存响应数据，false表示不保存，默认为true
     */
    public boolean isSaveResponseData() default true;

    /**
     * 需要排除的请求参数名称数组，用于过滤敏感或不必要的参数记录
     *
     * @return 参数名称数组，默认为空数组
     */
    public String[] excludeParamNames() default {};
}

